package com.ruoyi.machine.service;


import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.machine.EmpMachine;
import com.ruoyi.common.core.domain.store.EmpStoreVo;
import com.ruoyi.machine.domain.vo.EmpMachineVo;
import com.ruoyi.machine.mapper.EmpMachineMapper;

import java.util.List;

/**
 * 机台列表Service接口
 *
 * @author 黄字添
 * @date 2023-12-25
 */
public interface IEmpMachineService {
    /**
     * 查询机台列表
     *
     * @param MachineID 机台列表主键
     * @return 机台列表
     */
    public EmpMachine selectEmpMachineByMachineID(Long MachineID);

    /**
     * 查询机台列表列表
     *
     * @param empMachine 机台列表
     * @return 机台列表集合
     */
    public List<EmpMachine> selectEmpMachineList(EmpMachineVo empMachine);
    
    /**
     * 查询机台信息
     *
     * @param empMachine 机台信息
     * @return 机台信息
     */
    public EmpMachine selectMachineInfo(Long machineID);

    /**
     * 查询未绑定机台列表列表
     *
     * @param empMachine 机台列表
     * @return 机台列表集合
     */
    public List<EmpMachine> selectEmpMachineNoUseList(EmpMachineVo empMachine);

    /**
     * 查询所有机台列表
     *
     * @param empMachine 机台列表
     * @return 机台列表集合
     */
    public List<EmpMachine> selectEmpMachineAllUseList(EmpMachineVo empMachine);

    /**
     * 查询机台当前状态
     *
     * @param machineID 机台列表主键
     * @return 状态值
     */
    public Integer selectStatus(Long machineID);

    /**
     * 新增机台列表
     *
     * @param empMachine 机台列表
     * @return 结果
     */
    public int insertEmpMachine(EmpMachine empMachine);

    /**
     * 修改机台列表
     *
     * @param empMachine 机台列表
     * @return 结果
     */
    public int updateEmpMachine(EmpMachine empMachine);

    /**
     * 批量删除机台列表
     *
     * @param MachineIDs 需要删除的机台列表主键集合
     * @return 结果
     */
    public int deleteEmpMachineByMachineIDs(Long[] MachineIDs);

    /**
     * 删除机台列表信息
     *
     * @param MachineID 机台列表主键
     * @return 结果
     */
    public int deleteEmpMachineByMachineID(Long MachineID);

    /**
     * 导入机台列表信息
     *
     * @param machineList   机台列表
     * @param updateSupport 是否更新支持，如果已存在，则进行更新数据
     * @param operName      操作用户
     * @return
     */
    String importData(List<EmpMachine> machineList, boolean updateSupport, String operName);

    List<EmpStoreVo> selectEmpStoreList();

    public EmpMachineMapper getEmpMachineMapper();

    Long[] getMachineTypeByStoreID(EmpMachine empMachine);

    List<EmpMachine> selectEmpMachineListByTypeAndStore(EmpMachine empMachine);

    /**
     * 机台的四个状态，可用、使用中、下线、维护
     *
     * @param machineID 机台ID
     * @return 受影响行数
     */
    int updateStatusUnLock(Long machineID);

    int updateStatusLock(Long machineID);

    int handleStatusDown(Long machineID);

    int handleStatusMaintenance(Long machineID);

    /**
     * 围观人数增加和减少
     *
     * @param machineID 机台ID
     * @return 受影响行数
     */
    int addOnlineNumber(Long machineID);

    int reduceOnlineNumber(Long machineID);

    EmpMachine getOneByID(Long machineID);

    AjaxResult getMachineList(Long storeID);
    
    
    List<EmpMachine> selectAppMachineList(EmpMachineVo empMachine);
    
}
